function curry(fn) {
  // 传入的不是函数
  if (typeof fn !== 'function') {
    throw new Error('Not a Function！');
  }

  const curried = (...args) => {
    // 如果传入的参数数量达到函数的参数个数，则调用函数
    if (args.length >= fn.length) {
      return fn(...args);
    }
    // 否则，返回一个新的函数，继续收集参数
    return (...args2) => curried(...args, ...args2);
  };

  return curried;
}



// Example usage:
// 定义一个需要柯里化的函数
function add(a, b, c) {
  return a + b + c;
}

// 将函数柯里化
const curriedAdd = curry(add);

// 柯里化后的函数可以分步传参
console.log(curriedAdd(1)(2)(3)); // 输出: 6

// 也可以一次性传入所有参数
console.log(curriedAdd(1, 2, 3)); // 输出: 6

// 也可以部分传参，然后继续传递
const addFive = curriedAdd(2, 3);
console.log(addFive(5)); // 输出: 10

